package com.kucun.util;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/*
 * 物理地址是48位，别和ipv6搞错了
 */
public class GetMAC {
	/**
	 * @param args
	 * @throws UnknownHostException 
	 * @throws SocketException 
	 */
	public static void main(String[] args) throws UnknownHostException, SocketException {
		// TODO Auto-generated method stub
		
		//得到IP，输出PC-201309011313/122.206.73.83
		//InetAddress ia = InetAddress.getLocalHost();
		try {
			System.out.println(Md5(getServersMac()));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	@SuppressWarnings("unused")
	private static void getLocalMac(InetAddress ia) throws SocketException {
		// TODO Auto-generated method stub
		//获取网卡，获取地址
		byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
		//System.out.println("mac数组长度："+mac.length);
		StringBuffer sb = new StringBuffer("");
		for(int i=0; i<mac.length; i++) {
			if(i!=0) {
				sb.append("-");
			}
			//字节转换为整数
			int temp = mac[i]&0xff;
			String str = Integer.toHexString(temp);
			System.out.println("每8位:"+str);
			if(str.length()==1) {
				sb.append("0"+str);
			}else {
				sb.append(str);
			}
		}
		System.out.println("本机MAC地址:"+sb.toString().toUpperCase());
	}
	/**
	 * 返回服务的mac地址方便验证
	 * @param ia
	 * @return
	 * @throws SocketException
	 * @throws Exception 
	 */
	public static String  getServersMac() throws SocketException, Exception {
		// TODO Auto-generated method stub
		//获取网卡，获取地址
		byte[] mac = NetworkInterface.getByInetAddress(InetAddress.getLocalHost()).getHardwareAddress();
		//System.out.println("mac数组长度："+mac.length);
		StringBuffer sb = new StringBuffer("");
		for(int i=0; i<mac.length; i++) {
			if(i!=0) {
				sb.append("-");
			}
			//字节转换为整数
			int temp = mac[i]&0xff;
			String str = Integer.toHexString(temp);
			//System.out.println("每8位:"+str);
			if(str.length()==1) {
				sb.append("0"+str);
			}else {
				sb.append(str);
			}
		}
		return sb.toString().toUpperCase();
	}
	
	/**
	 * Description :mac地址用md5加密
	 * @param plainText
	 * @return stirng
	 */
	public static  String  Md5(String plainText ) { 
		StringBuffer buf = new StringBuffer(""); 
		try { 
		MessageDigest md = MessageDigest.getInstance("MD5"); 
		md.update(plainText.getBytes()); 
		byte b[] = md.digest(); 
		int i; 
		for (int offset = 0; offset < b.length; offset++) { 
		i = b[offset]; 
		if(i<0) i+= 256; 
		if(i<16) 
		buf.append("0"); 
		buf.append(Integer.toHexString(i)); 
		} 
		//System.out.println("result: " + buf.toString());//32位的加密 
		//System.out.println("result: " + buf.toString().substring(8,24));//16位的加密 
		} catch (NoSuchAlgorithmException e) { 
		// TODO Auto-generated catch block 
		e.printStackTrace(); 
		}
		return SHA(buf.toString());
		} 

	/**
	* Description :SHA 加密mac地址
	*/
	public static  String SHA(String plainText ) { 
	    	StringBuffer buf = new StringBuffer("");
	    	try { 
	    	MessageDigest md = MessageDigest.getInstance("SHA");   //sha
	    	md.update(plainText.getBytes()); 
	    	byte b[] = md.digest(); 
	    	int i; 
	    	for (int offset = 0; offset < b.length; offset++) { 
	    	i = b[offset]; 
	    	if(i<0) i+= 256; 
	    	if(i<16) 
	    	buf.append("0"); 
	    	buf.append(Integer.toHexString(i)); 
	    	} 
	    	//System.out.println("resultHSA: " + buf.toString());//32位的加密    92a3566e675381dc9553e3ca43dbc5bae98c7437
	    	//System.out.println("result: " + buf.toString().substring(8,24));//16位的加密 
	    	} catch (NoSuchAlgorithmException e) { 
	    	// TODO Auto-generated catch block 
	    	e.printStackTrace(); 
	    	} 
	    	return buf.toString();
	    	}
}